<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script type="text/javascript">
			// JS中为我们提供了三种逻辑运算符
			// ! 非
			// ! 可以用来对一个值进行非运算,所谓非运算就是对一个布尔值进行取反操作，true变false，false变true
			   // 如果对一个值进行两次取反,它不会变化
			   // 如果对非布尔值进行元素,则会将其转换为布尔值,然后再取反
			   // 所以我们可以利用该特点,来将一个其他的数据类型转换为布尔值
			   // 可以为一个任意数据类型取两次反,来将其转换为布尔值,原来和Boolean()函数一样
			// && 与
			   // &&可以对符号两侧的值进行与运算并返回其结果
			   // 运算规则： 两个值中只要有一个值为false就返回false  只有两个值都为true时，才会返回true
			          // JS中的"与"属于短路的与，如果第一个值为false，则不会看第二个值
					      // 第一个值为true,会检查第二个值
			// || 或
			    // || 可以对符号两侧的值进行或运算并返回结果
				// 运算规则：两个值中只要有一个true，就返回true  如果两个值都为false,才返回false
				        // JS中的"或"属于短路的或 如果第一个值为true，则不会看第二个值
			
			var a = true;
			//对a进行非运算
			a = !a;
			console.log("a = "+a);
			
			a = !!a;
			console.log("a = "+a);
			
			var b = 10;
			b = !b;
			console.log("b = "+b);//false
			console.log(typeof b);
			
			b = 0;
			b = !b;
			console.log("b = "+b);
			console.log(typeof b);//true
			
			//如果两个值都是true则返回true
			//只要有一个false,就返回false
			var result = true && true;
			console.log("result = "+result);//true
			
			result = true && false;
			console.log("result = "+result);//false
			
			result = false && false;
			console.log("result = "+result);//false
			
			// 第一个值为true,会检查第二个值
			// true && alert("看我出不出来")
			
			// 第一个值为false,不会检查第二个值
			false && alert("看我出不出来");
			
			//两个都是false,则返回false
			result = false || false;
			console.log("result = "+result);//false
			
			//只要有一个true,就返回true
			result = true || false;
			console.log("result = "+result);//true
			
			result = true || true;
			console.log("result = "+result);//true
			
			//第一个值为false,则会检查第二个值
			// false || alert("123");
			
			//第一个值为true,则不会检查第二个值
			// true || alert("123");
			
		</script>
	</head>
	<body>
	</body>
</html>
